package cn.tedu.jsd2205the.back.end.project.mapper;


import cn.tedu.jsd2205the.back.end.project.pojo.dto.OrderPagerDTO;
import cn.tedu.jsd2205the.back.end.project.pojo.entity.Order;
import cn.tedu.jsd2205the.back.end.project.pojo.vo.*;
import org.apache.ibatis.annotations.*;
import org.springframework.stereotype.Repository;

import java.util.List;

@Repository
public interface OrderMapper {
    /**
     * 添加订单
     * @param order 订单
     * @return
     */
    int insert(Order order);

    /**
     * 通过id删除订单
     * @param id
     */
    int deleteById(int id);

    /**
     * 通过id查询订单信息
     * @param id
     * @return
     */
    OrderSimpleOrderIdAndDistIdVO selectById(int id);

    /**
     * 通过id查询“订单号”
     * @param id
     * @return
     */
    String selectOrderIdById(int id);

    /**
     * 查询订单的“订单号和用户id”
     * @param id 订单id
     * @return
     */
    OrderSimpleOrderIdAndUserIdVO selectSimpleById(int id);

    /**
     * 通过“用户id”查询订单
     * @param orderPagerDTO
     * @return
     */
    List<OrderListVO> selectByUserId(OrderPagerDTO orderPagerDTO);

    /**
     * 通过“订单状态和用户id”查询订单信息
     * @param orderPagerDTO
     * @return
     */
    List<OrderListVO> selectByStateAndUserId(OrderPagerDTO orderPagerDTO);

    /**
     *  通过“订单状态和用户id”查询订单总数
     * @param state 订单状态
     * @param userId 用户id
     * @return
     */
    int selectCountByStateAndUserId(@Param("state") int state,
                                    @Param("userId") String userId);

    /**
     * 通过“订单号”查询订单
     * @param orderId 订单号
     * @return
     */
    OrderSelectByOrderIdVO selectByOrderId(String orderId);

    /**
     * 根据"用户Id"查询订单数量
     * @param userId
     * @return
     */
    int selectCountByUserId(String userId);


    /**
     * 通过“配送id”查询订单
     *
     * @param distId 配送信息id
     * @return
     */
    OrderSimpleVO selectByDistId(String distId);

    /**
     * 通过id修改订单的“状态”
     * @param id
     * @param state
     */
    void updateStateById(@Param("id") int id, @Param("state") int state);

    /**
     * 通过id修改订单的“修改次数”
     * @param id          订单id
     * @param updateTimes 修改次数
     */
    void updateUpdateTimesById(@Param("id") Integer id, @Param("updateTimes") int updateTimes);
}
